
#include "stm_std_lib.h"
//#include "systick.h"
#include "es_blockDelay.h"


//因为RCC的缘故，目前只能用GPIOB
class es_sonic
{
public:
	u32 ticks;
	void init(GPIO_TypeDef* echoPort, u16 echoNum, GPIO_TypeDef* trigPort, u16 trigNum)
	{
		echoP = echoPort;
		echoN = echoNum;

		trigP = trigPort;
		trigN = trigNum;

		init_gpio();

		init_rcc();
	}
	u32 read()
	{
		//Board.pUsart1->Write(0xac);
		GPIO_ResetBits(trigP, trigN);
		delay_us(5);
		GPIO_SetBits(trigP, trigN);
		delay_us(15);
		GPIO_ResetBits(trigP, trigN);

		while (!GPIO_ReadInputDataBit(echoP, echoN))
		{
			//Board.pUsart1->Write(0x0c);
		}
		ticks = 0;
		while (GPIO_ReadInputDataBit(echoP, echoN))
		{
			delay_us(1);
			//time++;
			ticks++;
		}
		return ((ticks));
	}
private:

	GPIO_TypeDef* echoP;
	u16 echoN;

	GPIO_TypeDef* trigP;
	u16 trigN;

	void init_gpio()
	{
		GPIO_InitTypeDef trig_Init;
		trig_Init.GPIO_Pin = trigN;
		trig_Init.GPIO_Mode = GPIO_Mode_Out_PP;
		trig_Init.GPIO_Speed = GPIO_Speed_50MHz;
		GPIO_Init(trigP, &trig_Init);

		GPIO_InitTypeDef echo_Init;
		echo_Init.GPIO_Pin = echoN;
		echo_Init.GPIO_Mode = GPIO_Mode_IPU;
		GPIO_Init(echoP, &echo_Init);
	}
	void init_rcc()
	{
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
		//RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
	}
};

es_sonic sr;
